package com.ylyq.ylxx.model.request;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * @ClassName CreateCreativeRequest
 * @Description TODO
 * @Author xiaweichao
 * @Date 2020/7/1 17:14
 * @Version 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(value = "创建广告创意的请求参数")
public class CreateCreativeRequest {
    @ApiModelProperty(value = "广告主ID", required = true)
    @NotNull(message = "广告主ID不能为空")
    private Long advertiser_id;
    @ApiModelProperty(value = "计划ID", required = true)
    @NotNull(message = "计划ID不能为空")
    private Long ad_id;
    @ApiModelProperty(value = "创意投放位置,详见【附录-投放位置】，请注意广告位中的头图信息流（INVENTORY_FEED）与头条详情页（INVENTORY_TEXT_LINK）已合并为头条系（依然使用INVENTORY_FEED字段，名称更改为头条系）", required = true)
    @NotNull(message = "创意投放位置不能为空")
    private String[] inventory_type;
    @ApiModelProperty(value = "是否使用优选广告位，0表示不使用优选，1表示使用，使用优选广告位的时候默认忽略inventory_type字段。\n" +
            "默认值: 0\n" +
            "允许值: 0, 1")
    private Integer smart_inventory;
    @ApiModelProperty(value = "场景广告位，详见【附录-场景广告位】，使用场景广告位时默认忽略inventory_type字段，与scene_inventory不能同时传\n" +
            "允许值: \"VIDEO_SCENE\", \"FEED_SCENE\", \"TAIL_SCENE\"")
    private String scene_inventory;
    @ApiModelProperty(value = "创意标签(最多20个标签,且每个标签长度不超过10个字符)", required = true)
    @NotNull(message = "创意标签不能为空")
    private String[] ad_keywords;
    @ApiModelProperty(value = "创意分类-三级行业，填写三级行业ID，可从 tools/industry/get/ 接口获取", required = true)
    @NotNull(message = "创意分类不能为空")
    private Long third_industry_id;
    @ApiModelProperty(value = "文章来源,推广目的非应用下载或者 当推广目的为应用下载且download_type为\"EXTERNAL_URL时\"时必填")
    private String source;
    @ApiModelProperty(value = "行动号召(当附加创意类型非\"ATTACHED_CREATIVE_NONE\"时, 必填)")
    private String button_text;
    @ApiModelProperty(value = "创意自定义参数，例如开发者可设定此参数为创意打标签用于区分使用的素材类型，选填")
    private String third_party_id;
    @ApiModelProperty(value = "创意展现方式,详见【附录-创意展现方式】\n" +
            "允许值:\"CREATIVE_DISPLAY_MODE_CTR\", \"CREATIVE_DISPLAY_MODE_RANDOM\"")
    private String creative_display_mode;
    @ApiModelProperty(value = "展示监测链接（传参数时检查是否有空格等以免报错！）")
    private String track_url;
    @ApiModelProperty(value = "点击监测链接（当推广目的为应用下载且创建计划传递了convert_id，系统会自动获取转化中的点击监测链接，且不可修改）（传参数时检查是否有空格等以免报错！）")
    private String action_track_url;
    @ApiModelProperty(value = "视频有效播放监测链接（传参数时检查是否有空格等以免报错！）")
    private String video_play_effective_track_url;
    @ApiModelProperty(value = "视频播放完毕监测链接（传参数时检查是否有空格等以免报错！）")
    private String video_play_done_track_url;
    @ApiModelProperty(value = "视频播放监测链接（传参数时检查是否有空格等以免报错！）")
    private String video_play_track_url;
    @ApiModelProperty(value = "是否关闭评论，0为开启，1为关闭，默认值：0；\n" +
            "允许值: 0, 1")
    private Integer is_comment_disable;
    @ApiModelProperty(value = "是否关闭视频详情页落地页(勾选该选项后,视频详情页中不默认弹出落地页,仅对视频广告生效)\n" +
            "允许值: 0, 1")
    private Integer close_video_detail;
    @ApiModelProperty(value = "是否开启衍生计划，1为开启，0为不开启\n" +
            "默认值: 0")
    private Long generate_derived_ad;
    @ApiModelProperty(value = "试玩素材url，可通过“查询试玩素材列表”进行获取。 只有穿山甲激励视频可以使用试玩素材，同时素材需要审核通过")
    private String playable_url;
    @ApiModelProperty(value = "\t自动生成视频素材，允许值：0（不启用），1（启用），默认：不启用")
    private Long is_presented_video;
    @ApiModelProperty(value = "是否开启自动派生创意,默认值: 1\n" +
            "允许值: 0(不启用), 1(启用)")
    private Long creative_auto_generate_switch;
    @ApiModelProperty(value = "\t点击监测链接上报方式，不可修改,默认值: SERVER_SEND\n" +
            "允许值: SERVER_SEND(服务器端上传), CLIENT_SEND(客户端上传), 客户端上传是指由客户端直接上报给监测平台的服务器, 只有白名单用户才可使用CLIENT_SEND(客户端上传), 如果需要开通请找对接的销售、运营")
    private String track_url_send_type;
    @ApiModelProperty(value = "品牌主页推广抖音号，不可修改")
    private String ies_core_user_id;
    @ApiModelProperty(value = "是否隐藏抖音作品列表广告内容，\n" +
            "可选值0：不隐藏，1：隐藏,默认为 0")
    private Integer is_feed_and_fav_see;
    @ApiModelProperty(value = "子链id列表")
    private Long[] sub_link_id_list;
    @ApiModelProperty(value = "创意类型，当值为\"STATIC_ASSEMBLE\"表示程序化创意，其他情况不传字段")
    private String creative_material_mode;
    @ApiModelProperty(value = "程序化创意包id，可通过获取程序化创意包接口进行查询，程序化创意包与自定义素材（title_list和image_list）不能同时使用\n" +
            "仅支持程序化创意，头条文章、DPA推广类型暂不支持")
    private Long procedural_package_id;

    @ApiModelProperty(value = "标题信息，程序化创意必填，字段说明见下表。最多包含10个标题")
    private List<TitleListBean> title_list;
    @ApiModelProperty(value = "素材信息，程序化创意必填，字段说明见下表。最多包含12张图和6个视频。")
    private List<ImageListBean> image_list;
    @ApiModelProperty(value = "自定义素材信息, 投放位置和创意类型决定素材规格。以下为字段说明。当为程序化创意时，该字段不填数据，值为[]")
    private List<CreativesBean> creatives;

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @ApiModel(value = "生成创意的属性内容-标题信息")
    public static class TitleListBean {
        @ApiModelProperty(value = "创意标题，如果要使用动态词包，格式如下：“XXX{词包名}XXX{词包名}XXX”，请注意当您使用动态词包需在下方creative_word_ids字段中按顺序传入词包ID，并且在一个标题中最多使用两个动态词包。长度为6-30个字, 两个英文字符占1位。")
        private String title;
        @ApiModelProperty(value = "动态词包ID，可使用 动态词包查询接口获得，结合标题中的词包格式您需要填写相同个数与顺序的词包ID，如果实际ID顺序与标题中词包名顺序不一致我们将以词包ID顺序为准。")
        private String[] creative_word_ids;
        @ApiModelProperty(value = "dpa词包id列表，针对dpa广告。。这字段在新建时不用填")
        private Long[] dpa_dict_ids;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @ApiModel(value = "生成创意的属性内容-素材信息")
    public static class ImageListBean {
        @ApiModelProperty(value = "素材类型， 注意：程序化创意不支持组图 CREATIVE_IMAGE_MODE_GROUP，其他类型图片都支持，如横版/竖版大图、小图。")
        private String image_mode;
        @ApiModelProperty(value = "图片id，视频素材时填写。图片ID和视频ID可通过 文件管理 中的接口获得")
        private String image_id;
        @ApiModelProperty(value = "视频id，视频素材时填写。图片ID和视频ID可通过 文件管理 中的接口获得。")
        private String video_id;
        @ApiModelProperty(value = "图片id列表，非视频素材时填写。图片ID和视频ID可通过 文件管理 中的接口获得。在一个子元素中：组图类型传3张图，其他类型传1张")
        private String[] image_ids;

        @ApiModelProperty(value = "dpa模板id，针对dpa广告。。这字段在新建时不用填")
        private Long template_id;
    }

    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @ApiModel(value = "生成创意的属性内容-素材信息")
    public static class CreativesBean {
        @ApiModelProperty(value = "创意标题，如果要使用动态词包，格式如下：“XXX{词包名}XXX{词包名}XXX”，请注意当您使用动态词包需在下方creative_word_ids字段中按顺序传入词包ID，并且在一个标题中最多使用两个动态词包。长度为6-30个字, 两个英文字符占1位。")
        private String title;
        @ApiModelProperty(value = "动态词包ID，可使用 动态词包查询接口获得，结合标题中的词包格式您需要填写相同个数与顺序的词包ID，如果实际ID顺序与标题中词包名顺序不一致我们将以词包ID顺序为准。")
        private String[] creative_word_ids;
        @ApiModelProperty(value = "素材类型， ")
        private String image_mode;
        @ApiModelProperty(value = "图片id列表，图片素材时填写在一个子元素中：组图类型传3张图，其他类型传1张。图片ID可通过文件管理中的获取图片素材接口获得。")
        private String[] image_ids;
        @ApiModelProperty(value = "视频id，视频素材时填写。视频ID可通过文件管理中的获取视频素材接口获得。")
        private String video_id;
        @ApiModelProperty(value = "图片id，视频素材时填写。图片ID可通过文件管理中的获取图片素材接口获得。")
        private String image_id;
        @ApiModelProperty(value = "是否将视频的封面和标题同步到图片创意，1为开启，0为不开启。视频素材时填写。")
        private Integer derive_poster_cid;



        @ApiModelProperty(value = "创意ID。当类型为程序化创意时，没有审核通过前，该字段为null。。这字段在新建时不用填")
        private Long creative_id;
        @ApiModelProperty(value = "dpa词包id列表，针对dpa广告。。这字段在新建时不用填")
        private Long[] dpa_dict_ids;
        @ApiModelProperty(value = "创意自定义参数，例如开发者可设定此参数为创意打标签用于区分使用的素材类型。。这字段在新建时不用填")
        private String third_party_id;
        @ApiModelProperty(value = "dpa模板id，针对dpa广告。。这字段在新建时不用填")
        private Long template_id;
        @ApiModelProperty(value = "DPA创意实际显示的图片id，针对dpa广告。。这字段在新建时不用填")
        private String template_image_id;

    }
}
